﻿

//	    /*	延迟执行
//	    @millisecond:Int 延迟时间(毫秒)
//	    @scope  :域
//	    @params	:Object(可选) 可变参数，要传递的任意多个参数
//	    @return	:Function
//	    */
//	    timeout: function (millisecond, scope, params) {
//	        var old = this;
//	        var args = arguments.length > 2 ? slice.call(arguments, 2) : null;
//	        return old.handle = win.setTimeout(function () {
//	            delete old.handle
//	            old.apply(scope == null ? this : scope, args || arguments);
//	        }, millisecond)
//	    },


//	    /*	清除延迟执行
//	    @return	:Boolean
//	    */
//	    clearTimeout: function () {
//	        if (this.handle) {
//	            win.clearTimeout(this.handle)
//	            delete this.handle
//	        }
//	    },


//	    /*	生成延迟执行函数
//	    @millisecond:Int 延迟时间(毫秒)
//	    @scope  :域
//	    @params:Object(可选) 可变参数，要传递的任意多个参数
//	    @return	:Function
//	    */
//	    defer: function (millisecond, scope, params) {
//	        var old = this;
//	        var args = arguments.length > 2 ? slice.call(arguments, 2) : null;
//	        var newF = function () {
//	            var s = scope == null ? this : scope
//	            args = args || arguments
//	            newF.handle = old.handle = win.setTimeout(function () {
//	                delete newF.handle
//	                delete old.handle
//	                old.apply(s, args);
//	            }, millisecond)
//	        }
//	        return newF
//	    },


//	    //## onBefore
//	    /*	在函数执行前执行一系列函数
//	    @funs	:Function/Array<Function> 要执行的所有函数
//	    @params	:Object(可选) 可变参数，要传递的任意多个参数
//	    @return	:Function
//	    */
//	    onBefore: function (funs, params) {
//	        var old = this;
//	        funs = $.toArray(funs).select($.toFun)
//	        var args = arguments.length > 1 ? slice.call(arguments, 1) : null;
//	        return function () {
//	            
//	            for (var i = 0; i < funs.length; i++)
//	               if( funs[i].apply(this, args || arguments)==fly.BREAK) return fly.BREAK
//	           
//	            return old.apply(this, arguments);
//	        }
//	    },


//	    /*	将函数附加到对象的一个方法前执行
//	    @obj		:被附加的对象
//	    @methodName:String 对象被附加的方法
//	    @params	:Object(可选) 可变参数，要传递的任意多个参数
//	    @return	:Function
//	    */
//	    attachBefore: function (obj, methodName, params) {
//	        if (!$.isFun(obj[methodName]))
//	            throw new Error(methodName + "不是有效的方法");
//	        return obj[methodName] = obj[methodName].onBefore.apply(obj[methodName], [this].concat(slice.call(arguments, 2)))
//	    },
//	    //#end


//	    //## onAfter
//	    /*	在函数执行后执行一系列函数
//	    @funs	:Function/Array<Function> 要执行的所有函数
//	    @params	:Object(可选) 可变参数，要传递的任意多个参数
//	    @return	:Function
//	    */
//	    onAfter: function (funs, params) {
//	        var old = this;
//	        funs = $.toArray(funs).select($.toFun)
//	        var args = arguments.length > 1 ? slice.call(arguments, 1) : null;
//	        return function () {
//	            var result = Function.result = Function.previousResult = old.apply(this, arguments);
//	            
//	            for (var i = 0; i < funs.length; i++)
//	                funs[i].apply(this, args || arguments)
//	           
//	            return result;
//	        }
//	    },


//	    /*	将函数附加到对象的一个方法后执行
//	    @obj		:被附加的对象
//	    @methodName:String 对象被附加的方法
//	    @params	:Object(可选) 可变参数，要传递的任意多个参数
//	    @return	:Function
//	    */
//	    attachAfter: function (obj, methodName, params) {
//	        return obj[methodName] = obj[methodName].onAfter.apply(obj[methodName], [this].concat(slice.call(arguments, 2)))
//	    },
//	    //#end


//	    /*	继承
//	    @base	:基类
//	    @overrides:包含扩展成员的任意多个参数
//	    @return	:this
//	    */
//	    inherit: function (base, overrides) {
//	        var f = function () { }
//	        f.prototype = $.isFun(base) ? base.prototype : base
//	        this.$base = $.isFun(base) ? base : f
//	        var fi = new f()
//	        var myP = this.prototype;
//	        this.prototype = fi;
//	        $.extend.apply(this, [this.prototype, myP].concat(slice.call(arguments, 1)))
//	        this.prototype.constructor = this
//	        return this
//	    },